/**
 */
package org.mro.grib.model.files.secondEdition.sections;

import java.nio.ByteBuffer;

import org.eclipse.emf.ecore.EObject;
import org.mro.grib.core.SectionException;
import org.mro.grib.model.files.secondEdition.products.IProductDefinition;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Product Definition Section</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link org.mro.grib.model.files.secondEdition.sections.ProductDefinitionSection#getStartOffset <em>Start Offset</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.sections.ProductDefinitionSection#getEndOffset <em>End Offset</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.sections.ProductDefinitionSection#getLength <em>Length</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.sections.ProductDefinitionSection#getNumberOfCoordinateValuesAfterTemplate <em>Number Of Coordinate Values After Template</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.sections.ProductDefinitionSection#getProductDefinitionTemplateNumber <em>Product Definition Template Number</em>}</li>
 *   <li>{@link org.mro.grib.model.files.secondEdition.sections.ProductDefinitionSection#getProductDefinitionTemplate <em>Product Definition Template</em>}</li>
 * </ul>
 * </p>
 *
 * @see org.mro.grib.model.files.secondEdition.sections.SectionsPackage#getProductDefinitionSection()
 * @model annotation="http://www.eclipse.org/emf/2002/GenModel description_en='Section 4 \u2013 Product definition section' note_1_en='Coordinate values are intended to document the vertical discretization associated with model data on hybrid coordinate\r\nvertical levels. A number of zero in octets 6\u20137 indicates that no such values are present. Otherwise the number\r\ncorresponds to the whole set of values.' note_2_en='Hybrid systems, in this context, employ a means of representing vertical coordinates in terms of a mathematical\r\ncombination of pressure and sigma coordinates. When used in conjunction with a surface pressure field and an\r\nappropriate mathematical expression, the vertical coordinate parameters may be used to interpret the hybrid vertical\r\ncoordinate.' note_3_en='Hybrid coordinate values, if present, should be encoded in IEEE 32-bit floating point format. They are intended to be\r\nencoded as pairs.' note_4_en='Two distinct hybrid coordinate formulations can be expressed in GRIB Edition 2. One is based on pressure, the other\r\non the logarithm of pressure. If the hybrid coordinate being used is based on pressure, then level type 105 (Code\r\ntable 4.5) shall be used to specify the vertical level type. If the formulation is based on the natural logarithm of\r\npressure, then level type 112 (Code table 4.5) shall be used. In both cases Notes 1 to 3 (above) apply fully.' regulation_92.6.1_en='Regulations 92.3.1 and 92.3.2 shall apply.' regulation_92.6.2_en='To maintain orthogonal structure of GRIB Edition 2, parameter names in Code table 4.2\r\nshould not contain surface type and statistical process as part of the name.'"
 * @generated
 */
public interface ProductDefinitionSection extends EObject {
	/**
	 * Returns the value of the '<em><b>Start Offset</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Start Offset</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Start Offset</em>' attribute.
	 * @see #setStartOffset(long)
	 * @see org.mro.grib.model.files.secondEdition.sections.SectionsPackage#getProductDefinitionSection_StartOffset()
	 * @model required="true"
	 *        annotation="http://www.eclipse.org/emf/2002/GenModel label_en='Start offset' description_en='Section start offset'"
	 * @generated
	 */
	long getStartOffset();

	/**
	 * Sets the value of the '{@link org.mro.grib.model.files.secondEdition.sections.ProductDefinitionSection#getStartOffset <em>Start Offset</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Start Offset</em>' attribute.
	 * @see #getStartOffset()
	 * @generated
	 */
	void setStartOffset(long value);

	/**
	 * Returns the value of the '<em><b>End Offset</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>End Offset</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>End Offset</em>' attribute.
	 * @see #setEndOffset(long)
	 * @see org.mro.grib.model.files.secondEdition.sections.SectionsPackage#getProductDefinitionSection_EndOffset()
	 * @model required="true"
	 *        annotation="http://www.eclipse.org/emf/2002/GenModel label_en='End offset' description_en='Section end offset'"
	 * @generated
	 */
	long getEndOffset();

	/**
	 * Sets the value of the '{@link org.mro.grib.model.files.secondEdition.sections.ProductDefinitionSection#getEndOffset <em>End Offset</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>End Offset</em>' attribute.
	 * @see #getEndOffset()
	 * @generated
	 */
	void setEndOffset(long value);

	/**
	 * Returns the value of the '<em><b>Length</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Length</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Length</em>' attribute.
	 * @see #setLength(int)
	 * @see org.mro.grib.model.files.secondEdition.sections.SectionsPackage#getProductDefinitionSection_Length()
	 * @model required="true"
	 *        annotation="http://www.eclipse.org/emf/2002/GenModel label_en='Length' description_en='Section length'"
	 * @generated
	 */
	int getLength();

	/**
	 * Sets the value of the '{@link org.mro.grib.model.files.secondEdition.sections.ProductDefinitionSection#getLength <em>Length</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Length</em>' attribute.
	 * @see #getLength()
	 * @generated
	 */
	void setLength(int value);

	/**
	 * Returns the value of the '<em><b>Number Of Coordinate Values After Template</b></em>' attribute.
	 * The default value is <code>"0"</code>.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Number Of Coordinate Values After Template</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Number Of Coordinate Values After Template</em>' attribute.
	 * @see #setNumberOfCoordinateValuesAfterTemplate(short)
	 * @see org.mro.grib.model.files.secondEdition.sections.SectionsPackage#getProductDefinitionSection_NumberOfCoordinateValuesAfterTemplate()
	 * @model default="0" required="true"
	 *        annotation="http://www.eclipse.org/emf/2002/GenModel label_en='Number of coordinate values' description_en='Number of coordinate values after template (see Note 1)'"
	 * @generated
	 */
	short getNumberOfCoordinateValuesAfterTemplate();

	/**
	 * Sets the value of the '{@link org.mro.grib.model.files.secondEdition.sections.ProductDefinitionSection#getNumberOfCoordinateValuesAfterTemplate <em>Number Of Coordinate Values After Template</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Number Of Coordinate Values After Template</em>' attribute.
	 * @see #getNumberOfCoordinateValuesAfterTemplate()
	 * @generated
	 */
	void setNumberOfCoordinateValuesAfterTemplate(short value);

	/**
	 * Returns the value of the '<em><b>Product Definition Template Number</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Product Definition Template Number</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Product Definition Template Number</em>' attribute.
	 * @see #setProductDefinitionTemplateNumber(short)
	 * @see org.mro.grib.model.files.secondEdition.sections.SectionsPackage#getProductDefinitionSection_ProductDefinitionTemplateNumber()
	 * @model required="true"
	 *        annotation="http://www.eclipse.org/emf/2002/GenModel label_en='Product definition template number' description_en='Product definition template number (see Code table 4.0)'"
	 * @generated
	 */
	short getProductDefinitionTemplateNumber();

	/**
	 * Sets the value of the '{@link org.mro.grib.model.files.secondEdition.sections.ProductDefinitionSection#getProductDefinitionTemplateNumber <em>Product Definition Template Number</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Product Definition Template Number</em>' attribute.
	 * @see #getProductDefinitionTemplateNumber()
	 * @generated
	 */
	void setProductDefinitionTemplateNumber(short value);

	/**
	 * Returns the value of the '<em><b>Product Definition Template</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Product Definition Template</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Product Definition Template</em>' containment reference.
	 * @see #setProductDefinitionTemplate(IProductDefinition)
	 * @see org.mro.grib.model.files.secondEdition.sections.SectionsPackage#getProductDefinitionSection_ProductDefinitionTemplate()
	 * @model containment="true" required="true"
	 * @generated
	 */
	IProductDefinition getProductDefinitionTemplate();

	/**
	 * Sets the value of the '{@link org.mro.grib.model.files.secondEdition.sections.ProductDefinitionSection#getProductDefinitionTemplate <em>Product Definition Template</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Product Definition Template</em>' containment reference.
	 * @see #getProductDefinitionTemplate()
	 * @generated
	 */
	void setProductDefinitionTemplate(IProductDefinition value);

	/**
	 * 
	 * @param buffer
	 * @throws SectionException 
	 */
	void initialise(ByteBuffer buffer) throws SectionException;
	
} // ProductDefinitionSection
